﻿// 迭代器模式 - 客户端代码
// 展示如何使用迭代器模式遍历集合
// 客户端通过迭代器接口访问集合元素，而不直接与集合内部实现交互

// 初始化控制台输出
Console.WriteLine("迭代器模式示例：");
Console.WriteLine("-------------------");

// 创建具体聚合对象（字符串类型的列表）
var list = new MyList<string>();

// 向集合中添加元素
list.Add("A");
list.Add("B");
list.Add("C");

Console.WriteLine("1. 使用正序迭代器遍历：");
// 从聚合对象获取正序迭代器
// 注意：客户端不需要知道集合的具体内部结构
var iterator = list.CreateIterator();

// 使用迭代器遍历集合
// 标准迭代模式：先调用MoveNext，然后获取Current
while (iterator.MoveNext())
{
  Console.WriteLine("  元素: " + iterator.Current); // 输出: A, B, C
}

Console.WriteLine("\n2. 使用逆序迭代器遍历：");
// 从聚合对象获取逆序迭代器
// 展示了迭代器模式支持多种遍历方式，而无需修改聚合类
var reverseIt = list.CreateReverseIterator();

// 使用逆序迭代器遍历集合
while (reverseIt.MoveNext())
{
  Console.WriteLine("  元素: " + reverseIt.Current); // 输出: C, B, A
}

Console.WriteLine("\n迭代器模式演示完成");